Central Docs
Catálogo Inicio

06. `unique` y `Region_t`

Region_t acompaña obligatoriamente a un parámetro unique y representa la región exclusiva demostrada por el compilador:

func normalize(
    values: unique int32[],
    length: Len_t,
    element_size: Size_t,
    region: Region_t
) void:
    if length > 0:
        values[0] = 0
    return

func main() int32:
    values: int32[2] = {4, 8}
    normalize(values)
    return 0

Region_t se declara después de Len_t y Size_t y nunca aparece en la llamada. El compilador comprueba que el origen sea almacenamiento local o un parámetro unique ya válido.

Dos argumentos unique no pueden representar la misma región, y un argumento ordinario tampoco puede entrar en una región marcada como exclusiva. Los arrays ordinarios conservan sus reglas de aliasing; unique es una garantía adicional, no una propiedad automática de todo array.

Para unique buffer[] solo se necesita Len_t y Region_t:

func clear(data: unique buffer[], length: Len_t, region: Region_t) void:
    if length > 0:
        data[0] = 0
    return